# list(列表)
# list中存的元素其实是引用
l = [1, 1.0, 'hello', True, b'', None, [1, "x"], ("y", 1), {'q': 1, 'w': 2, 'e': 3, 'r': 6}, {'w', 's', 'a', 'd'}]


# Create(增加)
# append
l.append('h')
print(l)


# +和+=
# 拼接两个列表然后返回一个新列表
l_1 = ['a']
l_2 = l + l_1
print(l_2)


# *和*=
l_3 = l_1 * 10
print(l_3)


# insert
# 指定位置添加元素
l.insert(5, 15)
print(l)


# Retrieve(检索)
# 索引取值
# 所有序列都支持索引取值
l_r = l[8]
print(l_r)


# 切片
l_q = l[0:6]
print(l_q)

# 取最后一个
l_q1 = l_q[-1]
print(l_q1)

# 间隔问题
l_q2 = l_q[0:5:2]
print(l_q2)


# index
l.insert(l.index(15), 'test')


# Update(更新)
# 索引赋值
l[6] = "3"
print(l)

# 切片赋值
l[5:7] = [57]
print(l)


# Delete(删除)
# pop() 从末尾删除元素并返回
l.pop()
print(l)

# clear
# 清除当前列表的元素，不会改变列表的内存地址
l_q.clear()
print(l_q)


# sort()(排序)
l_q = [5, 8, 0, 1, 4, 7, 9, 6, 3, 2]
l_s = l_q
l_s.sort()
print(l_s)

# sorted
l_d = sorted(l_q)
print(l_d)

# reverse
l_d.reverse()
print(l_d)

# reversed
# 倒序之后返回新列表
print(list(reversed(l_s)))



# tuple

# Create 无
# Update 无
# Delete 无

# Retrieve
# 索引取值
# index
# 切片
t = tuple(l)
print(t, t[0], t.index(1), t[0:1])



# dict
# Create
# 键对值赋值
d = {}
d['z'] = -1


# update
# 提供合并字典的功能
d2 = {'a': 1, 'b': 1.0, 'c': 'hello', 'd': True, 'e': b'', 'f': None}
d.update(d2)


# setdifault
# 如果字典中没有当前key，那么就设置默认值
d.setdefault('y', 3.14)


# Retrieve
# 键对值访问
print(d['a'])


# get
# 键对值访问缺失key会报错，而get可以指定默认值
print(d.get('h', 0))


# keys()
# 返回所有key
print(d.keys())


# values()
# 返回所有value
print(d.values())


# items()
# 返回所有键对值
print(d.items())


# Update
# 键对值赋值
# update


# Delete
# pop(key)
# 删除当前元素并返回value
print(d.pop('z'))


# popitem()
# 对于人来说，相当于随机返回一个item
print(d.popitem())


# clear()
d2.clear()
print(d2)


# set
# Create
# add
s = set(d.keys())
s.add('h')


# update
s.update('x')


# Retrieve
# 运算符in
print('a' in s)


# Update
# union
s.union(set(d2.keys()))
print(s)


# Delete
# remove和discard
# discard缺失元素时不会报错，而remove会报错
s.discard('j')
s.remove('c')
print(s)


# pop()
# 当成无序删除并返回元素
s.pop()
print(s)